package com.BMS.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import com.BMS.Service.UserService;
import com.BMS.entity.Manager;
import com.BMS.entity.Reader;
import com.alibaba.fastjson.JSONObject;
import com.google.code.kaptcha.Constants;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

/**
 * 用户登录注册控制层
 * @author lenovo
 *
 */

@Controller
@RequestMapping("/User")
public class UserController {

	private UserService userService;
	
	@Autowired
	public void setUserService(UserService userService) {
		this.userService = userService;
	}
	
	/*
	 * 登录接口
	 * 正确：返回200
	 * 错误：
	 * 401 密码错误
	 * 402 学号/工号不存在
	 * 403 身份错误
	 * 404 验证码错误
	 */
	@ResponseBody
	@RequestMapping(value="/Login.do",method = RequestMethod.POST,produces={"application/json;charset=UTF-8"})
	public String doLogin(String type, String user_id, String psw, String validatecode, HttpSession session) {
		// 初始化JSON对象
		JSONObject obj = new JSONObject();
		
		// 忽略前端验证码大小写
		validatecode = validatecode.toLowerCase();
		// 获取session中的验证码
		String randomcode = session.getAttribute(Constants.KAPTCHA_SESSION_KEY).toString().toLowerCase();
		
		if(randomcode.equals(validatecode)) {
			// 验证码正确
			if("manager".equals(type)) {
				// 管理员身份
				Manager manager = userService.findManagerById(user_id);
				if(manager!=null) {
					// 用户存在
					if(manager.getPassword().equals(psw)) {
						// 密码正确
						session.setAttribute("user", manager);
						session.setAttribute("user_type", "manager");
						obj.put("code", "200");
						return obj.toString();
					} else {
						// 密码错误
						obj.put("code", "401");
						obj.put("msg", "密码不正确!");
						return obj.toString();
					}
				} else {
					// 用户不存在
					obj.put("code", "402");
					obj.put("msg", "学号/工号不正确！");
					return obj.toString();
				}
			}else if("reader".equals(type)) {
				// 读者身份
				Reader reader = userService.findReaderById(user_id);
				if(reader!=null) {
					// 用户存在
					if(reader.getPassword().equals(psw)) {
						// 密码正确
						session.setAttribute("user", reader);
						session.setAttribute("user_type", "reader");
						obj.put("code", "200");
						return obj.toString();
					} else {
						// 密码错误
						obj.put("code", "401");
						obj.put("msg", "密码不正确!");
						return obj.toString();
					}
				}else {
					// 用户不存在
					obj.put("code", "402");
					obj.put("msg", "学号/工号不正确！");
					return obj.toString();
				}
			}else {
				// 身份不正确
				obj.put("code", "403");
				obj.put("msg", "身份出错！");
				return obj.toString();
			}
		}else {
			// 验证码不正确
			obj.put("code", "404");
			obj.put("msg", "验证码不正确！");
			return obj.toString();
		}
	}
	
	/*
	 * 修改用户信息功能控制层接口
	 * 接受前端ajax POST请求
	 * 返回json格式数据
	 * 正确：返回code="200",msg="修改成功"
	 * 错误：返回code="401",msg="用户类型异常"
	 *     返回code="402",msg="用户不存在"
	 */
	@ResponseBody
	@RequestMapping(value="/userUpdate.do",method=RequestMethod.POST,produces={"application/json;charset=UTF-8"})
	public String userUpdate(String user_type, String user_id, String name, String sex, int age, HttpSession session) {
		// 初始化JSON对象
		JSONObject obj = new JSONObject();
		
		boolean userNULL = false;
		Manager m = null;
		Reader r = null;
		// 检查用户是否存在
		if("manager".equals(user_type)) {
			// 管理员
			m = userService.findManagerById(user_id);
			if(m==null) {
				userNULL = true;
			}
		} else if("reader".equals(user_type)) {
			// 读者
			r = userService.findReaderById(user_id);
			if(r==null) {
				userNULL = true;
			}
		} else {
			// 类型错误
			obj.put("code", "401");
			obj.put("msg", "用户类型错误！");
			return obj.toString();
		}
		if(userNULL) {
			// 用户不存在
			obj.put("code", "402");
			obj.put("msg", "用户不存在！");
			return obj.toString();
		} else {
			// 保存用户信息
			if("manager".equals(user_type)) {
				m.setName(name);
				userService.updateManager(m);
				session.setAttribute("user", m);
				obj.put("code", "200");
				obj.put("msg", "修改成功！");
				return obj.toString();
			} else {
				r.setName(name);
				r.setAge(age);
				r.setSex(sex);
				userService.updateReader(r);
				session.setAttribute("user", r);
				obj.put("code", "200");
				obj.put("msg", "修改成功！");
				return obj.toString();
			}
		}
	}
	
	/*
	 * 退出登录功能控制层接口
	 * 接受前端 GET请求
	 * 返回Login.jsp
	 */
	@RequestMapping(value="/Logout.do",method=RequestMethod.GET)
	public String Logout(HttpSession session) {
		session.invalidate();
		return "redirect:/";
	}

}
